package reflection;

import java.lang.reflect.Method;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.util.List;
import java.util.Map;

public class test11 {
    //泛型作为参数
    public void test1(Map<String,user> map , List<user> list){
        System.out.println("test1");

    }

    //泛型作为返回值
    public Map<String,user> test2(){
        System.out.println("test2");
        return null;
    }

    public static void main(String[] args) throws NoSuchMethodException {
        //通过反射获取test11的方法test1
       Method method = test11.class.getDeclaredMethod("test1", Map.class, List.class);
       //接受test1中的参数泛型的类型
        Type[] genericParameterTypes = method.getGenericParameterTypes();
        //打印泛型类型
        for (Type genericParameterType : genericParameterTypes) {
            System.out.println(genericParameterType);
            //判断是否是参数化类型
            if(genericParameterType instanceof ParameterizedType){
                //获取泛型中的参数类型
              Type[] arguments =   ((ParameterizedType) genericParameterType).getActualTypeArguments();
                for (Type argument : arguments) {
                    System.out.println(argument);
                }
            }
        }
        System.out.println("$$$$$$$$$$$$$$$$");
        //获取test2的返回值类型
        Method method2 = test11.class.getDeclaredMethod("test2", null);
        Type genericReturnType = method2.getReturnType();
        //判断是否是参数化类型
        if(genericReturnType instanceof ParameterizedType){
            //获取泛型中的参数类型
            Type[] arguments =   ((ParameterizedType) genericReturnType).getActualTypeArguments();
            for (Type argument : arguments) {
                System.out.println(argument);
            }
        }

    }
}
